package de.dhbw.karlsruhe.picsim.model.actions;

import de.dhbw.karlsruhe.picsim.model.memory.RegisterValue;
import de.dhbw.karlsruhe.picsim.util.Bits;
import org.jetbrains.annotations.NotNull;

import java.util.List;

/**
 * Created by IntelliJ IDEA.
 * User: goesen
 * Date: Apr 13, 2010
 * Time: 12:05:07 AM
 */

/**
 * Anstatt das die Befehle ihre Aktionen selbst instantieren müssen, können sie diese bequeme Facade benutzen
 */
public interface ActionFactory {
    @NotNull
    WriteInWAction createWriteInWAction(@NotNull RegisterValue value);

    @NotNull
    WriteInFileAction createWriteInFileAction(@NotNull Bits address, @NotNull RegisterValue value);

    @NotNull
    StatusAction setZeroBit();

    @NotNull
    StatusAction clearZeroBit();

    @NotNull
    StatusAction setCarryBit();

    @NotNull
    StatusAction clearCarryBit();

    @NotNull
    PicAction setDigitCarryBit();

    @NotNull
    PushToStackAction createPushToStackAction();

    @NotNull
    PopFromStackAction popFromStackAction();

    @NotNull
    ModifyProgramCounterAction createSkipNextCommandAction();

    @NotNull
    ModifyProgramCounterAction createElevenBitJump(@NotNull Bits argument);

    @NotNull
    List<? extends PicAction> clearWatchDog();

    @NotNull
    PicAction clearDigitCarryBit();
}
